#include <iostream>

#include <unistd.h>
#include <signal.h>

void print_pending(const sigset_t& pending)
{
    for (int i = 31; i > 0; --i)
        std::cout << sigismember(&pending, i);
    std::cout << std::endl;
}

void handler(int signo)
{
    std::cout << "catch signo: " << signo << std::endl;
}

int main()
{
    signal(2, handler);

    //对2号信号进行屏蔽
    sigset_t bset, oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    sigaddset(&bset, 2);
    //调用系统调用,将数据设置进内核
    sigprocmask(SIG_SETMASK, &bset, &oset);

    //打印当前进程的pending
    sigset_t pending;
    int n = 0;
    while (true)
    {
        if (sigpending(&pending) < 0)
            continue;
        print_pending(pending);
        sleep(1);
        if (n == 10)
        {
            std::cout << "unlock 2 signo" << std::endl;
            sigprocmask(SIG_SETMASK, &oset, nullptr);
        }
        n++;
    }
    
    //发送2号

    return 0;
}